{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Topic Modeling: probabilistic LSA / Non-negative Matrix Factorization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Probabilistic Latent Semantic Analysis (pLSA) takes a statistical perspective on LSA and creates a generative model to address the lack of theoretical underpinnings of LSA. \n",
    "\n",
    "pLSA explicitly models the probability each co-occurrence of documents d and words w described by the DTM as a mixture of conditionally independent multinomial distributions that involve topics t. \n",
    "The symmetric formulation of this generative process of word-document co-occurrences assumes both words and documents are generated by the latent topic class, whereas the asymmetric model assumes the topics are selected given the document, and words result in a second step given the topic.\n",
    "$$P(w, d) = \\underbrace{\\sum_tP(d\\mid t)P(w\\mid t)}_{\\text{symmetric}}=\\underbrace{P(d) \\sum_tP(t\\mid d)P(w\\mid t)}_{\\text{asymmetric}}$$\n",
    "The number of topics is a hyperparameter chosen prior to training and is not learned from the data. \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The benefits of using a probability model is that we can now compare models by evaluating the probability they assign to new documents given the parameters learned during training."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Imports & Settings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:30.269934Z",
     "start_time": "2020-06-20T19:27:30.268045Z"
    }
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:30.762586Z",
     "start_time": "2020-06-20T19:27:30.270933Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "from pathlib import Path\n",
    "from random import randint\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "# sklearn for feature extraction & modeling\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "from sklearn.decomposition import NMF\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# Visualization\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:30.765620Z",
     "start_time": "2020-06-20T19:27:30.763559Z"
    }
   },
   "outputs": [],
   "source": [
    "np.random.seed(42)\n",
    "sns.set_style('whitegrid')\n",
    "pd.options.display.float_format = '{:,.2f}'.format"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "source": [
    "## Load BBC data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:30.774122Z",
     "start_time": "2020-06-20T19:27:30.766680Z"
    }
   },
   "outputs": [],
   "source": [
    "# change to your data path if necessary\n",
    "DATA_DIR = Path('../data')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:30.947286Z",
     "start_time": "2020-06-20T19:27:30.775035Z"
    },
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [],
   "source": [
    "path = DATA_DIR / 'bbc'\n",
    "files = sorted(list(path.glob('**/*.txt')))\n",
    "doc_list = []\n",
    "for i, file in enumerate(files):\n",
    "    with open(str(file), encoding='latin1') as f:\n",
    "        topic = file.parts[-2]\n",
    "        lines = f.readlines()\n",
    "        heading = lines[0].strip()\n",
    "        body = ' '.join([l.strip() for l in lines[1:]])\n",
    "        doc_list.append([topic.capitalize(), heading, body])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "source": [
    "### Convert to DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:30.954186Z",
     "start_time": "2020-06-20T19:27:30.948106Z"
    },
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 2225 entries, 0 to 2224\n",
      "Data columns (total 3 columns):\n",
      " #   Column    Non-Null Count  Dtype \n",
      "---  ------    --------------  ----- \n",
      " 0   Category  2225 non-null   object\n",
      " 1   Heading   2225 non-null   object\n",
      " 2   Article   2225 non-null   object\n",
      "dtypes: object(3)\n",
      "memory usage: 52.3+ KB\n"
     ]
    }
   ],
   "source": [
    "docs = pd.DataFrame(doc_list, columns=['Category', 'Heading', 'Article'])\n",
    "docs.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Create Train & Test Sets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:30.964994Z",
     "start_time": "2020-06-20T19:27:30.955203Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "train_docs, test_docs = train_test_split(docs, \n",
    "                                         stratify=docs.Category, \n",
    "                                         test_size=50, \n",
    "                                         random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:30.972313Z",
     "start_time": "2020-06-20T19:27:30.965981Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((2175, 3), (50, 3))"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_docs.shape, test_docs.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:30.986927Z",
     "start_time": "2020-06-20T19:27:30.974593Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sport            12\n",
       "Business         11\n",
       "Politics          9\n",
       "Tech              9\n",
       "Entertainment     9\n",
       "Name: Category, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(test_docs.Category).value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Vectorize train & test sets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:31.403929Z",
     "start_time": "2020-06-20T19:27:30.988154Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<2175x2907 sparse matrix of type '<class 'numpy.float64'>'\n",
       "\twith 205235 stored elements in Compressed Sparse Row format>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vectorizer = TfidfVectorizer(max_df=.2, \n",
    "                             min_df=.01, \n",
    "                             stop_words='english')\n",
    "\n",
    "train_dtm = vectorizer.fit_transform(train_docs.Article)\n",
    "words = vectorizer.get_feature_names()\n",
    "train_dtm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:31.416514Z",
     "start_time": "2020-06-20T19:27:31.404927Z"
    },
    "scrolled": true,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<50x2907 sparse matrix of type '<class 'numpy.float64'>'\n",
       "\twith 4649 stored elements in Compressed Sparse Row format>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_dtm = vectorizer.transform(test_docs.Article)\n",
    "test_dtm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get token counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:31.434382Z",
     "start_time": "2020-06-20T19:27:31.417570Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "film       41.47\n",
       "game       36.54\n",
       "best       36.33\n",
       "labour     32.75\n",
       "music      30.97\n",
       "company    29.73\n",
       "election   28.09\n",
       "england    28.08\n",
       "market     27.67\n",
       "party      27.44\n",
       "dtype: float64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_token_count = train_dtm.sum(0).A.squeeze()\n",
    "tokens = vectorizer.get_feature_names()\n",
    "word_count = pd.Series(train_token_count, index=tokens).sort_values(ascending=False)\n",
    "word_count.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## probabilistic Latent Semantic Analysis"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "### Implementation using Non-Negative Matrix Factorization\n",
    "\n",
    "pLSI [has been shown](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.70.8839&rep=rep1&type=pdf) to be equivalent to Non-Negative Matrix Factorization with Kullback-Leibler Divergence objective."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "pLSI is equivalent to Non-Negative Matrix Factorization using a Kullback-Leibler Divergence objective (see references on GitHub). Hence, we can use the [sklearn.decomposition.NMF](http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.html) class to implement this model, following closely the LSA example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:31.437938Z",
     "start_time": "2020-06-20T19:27:31.435376Z"
    }
   },
   "outputs": [],
   "source": [
    "n_components = 5\n",
    "topic_labels = ['Topic {}'.format(i) for i in range(1, n_components+1)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using the same train-test split of the DTM produced by the TfidfVectorizer, we fit pLSA like so:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:32.377685Z",
     "start_time": "2020-06-20T19:27:31.438767Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "NMF(beta_loss='kullback-leibler', max_iter=1000, n_components=5,\n",
       "    random_state=42, solver='mu')"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nmf = NMF(n_components=n_components, \n",
    "          random_state=42, \n",
    "          solver='mu',\n",
    "          beta_loss='kullback-leibler', \n",
    "          max_iter=1000)\n",
    "nmf.fit(train_dtm)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We get a measure of the reconstruction error that is a substitute for the explained variance measure for LSI:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:32.381658Z",
     "start_time": "2020-06-20T19:27:32.378706Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "315.93734706741594"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nmf.reconstruction_err_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Explore Topics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:32.719166Z",
     "start_time": "2020-06-20T19:27:32.382687Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2175, 5)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_doc_topics = nmf.transform(train_dtm)\n",
    "train_doc_topics.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:32.725491Z",
     "start_time": "2020-06-20T19:27:32.720091Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Category                           Politics\n",
       "Heading     UK firms 'embracing e-commerce'\n",
       "Topic 1                                0.04\n",
       "Topic 2                                0.01\n",
       "Topic 3                                0.00\n",
       "Topic 4                                0.00\n",
       "Topic 5                                0.06\n",
       "dtype: object"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i = randint(0, len(train_docs))\n",
    "(train_docs.iloc[i, :2].append(pd.Series(train_doc_topics[i], \n",
    "                                         index=topic_labels)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:32.734447Z",
     "start_time": "2020-06-20T19:27:32.726805Z"
    }
   },
   "outputs": [],
   "source": [
    "train_result = pd.DataFrame(data=train_doc_topics,\n",
    "                   columns=topic_labels,\n",
    "                   index=train_docs.Category)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:32.763255Z",
     "start_time": "2020-06-20T19:27:32.735377Z"
    }
   },
   "outputs": [],
   "source": [
    "test_eval = pd.DataFrame(data=nmf.transform(test_dtm), \n",
    "                         columns=topic_labels,\n",
    "                         index=test_docs.Category)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Due to its probabilistic nature, pLSA produces only positive topic weights that result in more straightforward topic-category relationships for the test and training sets:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:34.001176Z",
     "start_time": "2020-06-20T19:27:32.764134Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 931.75x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = pd.melt(train_result.assign(Data='Train')\n",
    "                 .append(test_eval.assign(Data='Test'))\n",
    "                 .reset_index(),\n",
    "                 id_vars=['Data', 'Category'],\n",
    "                 var_name='Topic',\n",
    "                 value_name='Weight')\n",
    "\n",
    "result = pd.melt(train_result.assign(Data='Train')\n",
    "                 .append(test_eval.assign(Data='Test'))\n",
    "                 .reset_index(),\n",
    "                 id_vars=['Data', 'Category'],\n",
    "                 var_name='Topic',\n",
    "                 value_name='Weight')\n",
    "\n",
    "g =sns.catplot(x='Category', \n",
    "               y='Weight', \n",
    "               hue='Topic', \n",
    "               row='Data', \n",
    "               kind='bar', \n",
    "               data=result, \n",
    "               height=3,\n",
    "               aspect=4);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Most important words by topic"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also see that the word lists that describe each topic begin to make more sense, e.g. the ‘Entertainment’ category is most directly associated with Topic 4 that includes the words ‘film’, ‘start’, etc."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:34.011598Z",
     "start_time": "2020-06-20T19:27:34.002401Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Topic 1</th>\n",
       "      <th>Topic 2</th>\n",
       "      <th>Topic 3</th>\n",
       "      <th>Topic 4</th>\n",
       "      <th>Topic 5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>film</th>\n",
       "      <td>0.01</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>game</th>\n",
       "      <td>0.00</td>\n",
       "      <td>0.53</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>best</th>\n",
       "      <td>0.05</td>\n",
       "      <td>0.15</td>\n",
       "      <td>0.02</td>\n",
       "      <td>0.53</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>labour</th>\n",
       "      <td>0.02</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.67</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>music</th>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.37</td>\n",
       "      <td>0.30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>company</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>election</th>\n",
       "      <td>0.03</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.56</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>england</th>\n",
       "      <td>0.04</td>\n",
       "      <td>0.38</td>\n",
       "      <td>0.07</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>market</th>\n",
       "      <td>0.35</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>party</th>\n",
       "      <td>0.01</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.55</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.02</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Topic 1  Topic 2  Topic 3  Topic 4  Topic 5\n",
       "film         0.01     0.00     0.00     0.95     0.00\n",
       "game         0.00     0.53     0.00     0.00     0.12\n",
       "best         0.05     0.15     0.02     0.53     0.00\n",
       "labour       0.02     0.00     0.67     0.00     0.00\n",
       "music        0.00     0.00     0.00     0.37     0.30\n",
       "company      0.38     0.00     0.00     0.00     0.00\n",
       "election     0.03     0.00     0.56     0.00     0.00\n",
       "england      0.04     0.38     0.07     0.00     0.00\n",
       "market       0.35     0.00     0.00     0.00     0.00\n",
       "party        0.01     0.00     0.55     0.01     0.02"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "topics = pd.DataFrame(nmf.components_.T,\n",
    "                      index=tokens,\n",
    "                      columns=topic_labels)\n",
    "topics.loc[word_count.head(10).index]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:34.319692Z",
     "start_time": "2020-06-20T19:27:34.012977Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(12, 4))\n",
    "top_words, top_vals = pd.DataFrame(), pd.DataFrame()\n",
    "for topic, words_ in topics.items():\n",
    "    top10 = words_.nlargest(10).index\n",
    "    vals = words_.loc[top10].values\n",
    "    top_vals[topic] = vals\n",
    "    top_words[topic] = top10.tolist()\n",
    "sns.heatmap(pd.DataFrame(top_vals), \n",
    "            annot=top_words, \n",
    "            fmt = '', \n",
    "            center=0, \n",
    "            cmap=sns.diverging_palette(0, 255, sep=1, n=256), \n",
    "            ax=ax);\n",
    "ax.set_title('Top Words per Topic')\n",
    "fig.tight_layout();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:34.331011Z",
     "start_time": "2020-06-20T19:27:34.320937Z"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Topic 1</th>\n",
       "      <th>Topic 2</th>\n",
       "      <th>Topic 3</th>\n",
       "      <th>Topic 4</th>\n",
       "      <th>Topic 5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>000m</th>\n",
       "      <td>0.00</td>\n",
       "      <td>0.07</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.18</td>\n",
       "      <td>0.07</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.08</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>0.10</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100m</th>\n",
       "      <td>0.02</td>\n",
       "      <td>0.05</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.10</td>\n",
       "      <td>0.02</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.07</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Topic 1  Topic 2  Topic 3  Topic 4  Topic 5\n",
       "000m     0.00     0.07     0.00     0.00     0.00\n",
       "10       0.18     0.07     0.00     0.08     0.00\n",
       "100      0.10     0.00     0.00     0.00     0.04\n",
       "100m     0.02     0.05     0.00     0.00     0.00\n",
       "11       0.10     0.02     0.00     0.07     0.00"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "topics = pd.DataFrame(nmf.components_.T,\n",
    "                      index=words,\n",
    "                      columns=topic_labels)\n",
    "topics.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T19:27:34.347955Z",
     "start_time": "2020-06-20T19:27:34.332611Z"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Topic 1</th>\n",
       "      <th>Topic 2</th>\n",
       "      <th>Topic 3</th>\n",
       "      <th>Topic 4</th>\n",
       "      <th>Topic 5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>company</td>\n",
       "      <td>game</td>\n",
       "      <td>labour</td>\n",
       "      <td>film</td>\n",
       "      <td>mobile</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>market</td>\n",
       "      <td>win</td>\n",
       "      <td>election</td>\n",
       "      <td>best</td>\n",
       "      <td>technology</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2004</td>\n",
       "      <td>england</td>\n",
       "      <td>blair</td>\n",
       "      <td>awards</td>\n",
       "      <td>software</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>firm</td>\n",
       "      <td>play</td>\n",
       "      <td>party</td>\n",
       "      <td>music</td>\n",
       "      <td>users</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>sales</td>\n",
       "      <td>club</td>\n",
       "      <td>brown</td>\n",
       "      <td>award</td>\n",
       "      <td>digital</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>european</td>\n",
       "      <td>team</td>\n",
       "      <td>minister</td>\n",
       "      <td>band</td>\n",
       "      <td>use</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>growth</td>\n",
       "      <td>match</td>\n",
       "      <td>howard</td>\n",
       "      <td>album</td>\n",
       "      <td>music</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>economy</td>\n",
       "      <td>cup</td>\n",
       "      <td>prime</td>\n",
       "      <td>films</td>\n",
       "      <td>computer</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>expected</td>\n",
       "      <td>players</td>\n",
       "      <td>britain</td>\n",
       "      <td>star</td>\n",
       "      <td>phone</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>group</td>\n",
       "      <td>old</td>\n",
       "      <td>chancellor</td>\n",
       "      <td>actor</td>\n",
       "      <td>games</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Topic 1  Topic 2     Topic 3 Topic 4     Topic 5\n",
       "0   company     game      labour    film      mobile\n",
       "1    market      win    election    best  technology\n",
       "2      2004  england       blair  awards    software\n",
       "3      firm     play       party   music       users\n",
       "4     sales     club       brown   award     digital\n",
       "5  european     team    minister    band         use\n",
       "6    growth    match      howard   album       music\n",
       "7   economy      cup       prime   films    computer\n",
       "8  expected  players     britain    star       phone\n",
       "9     group      old  chancellor   actor       games"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "top_words = {}\n",
    "for topic, words_ in topics.items():\n",
    "    top_words[topic] = words_.nlargest(10).index.tolist()\n",
    "pd.DataFrame(top_words)"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "name": "_merged",
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "47px",
    "left": "1203px",
    "right": "1064px",
    "top": "97px",
    "width": "212px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
